package nonSpecialCount;

public class Solution {
    /**
     * 如果一个数 除了1和他本身之外，有且只有一个因数，那么这个因数一定是质数，且这个因数的平方等于这个数
     * @param l 左边界
     * @param r 有边界
     * @return 个数
     */
    public int nonSpecialCount(int l, int r) {
        int count = r-l+1;
        int n = (int) Math.sqrt(r);
        int[] isZS = new int[n+1];
        for (int i =2; i <= n; i+=1){
            //若这个因数数是质数
            if (isZS[i] == 0){
                int tmp = i*i;
                if (tmp >= l && tmp <= r){
                    //且这个因数的平方在区间内,则满足情况
                    count -=1;
                    System.out.println(tmp);
                }
                int x = i ;
                int j = x*i;
                while ( j <= n ){
                    //如果一个数是指数那么他的倍数一定不是质数
                    isZS[j] = 1;
                    j +=i;
                }

            }
        }
        return count;
    }
}
